﻿using System.Collections.Generic;
using Ninject.Modules;
using ebcpatterns;
using ebcpatterns.flow;
using appladen.gui;
using appladen.contracts;
using appladen.csvwerk;
using appladen.seitenwerk;
using appladen.txtfileadapter;
using appladen.gui.ViewModels;
using appladen.contracts.data;
using appladen.host;
using appladen.cache;

namespace appladen.app.NinjectModules
{
    public class AppModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IViewmodel>().To<ViewModel>().InSingletonScope();
            Bind<SharedState<IEnumerable<Seite>>>().ToSelf().InSingletonScope();
            
            Bind<IMainboard>().To<Mainboard>();
            Bind<IView>().To<View>();
            Bind<ITxtFileAdapter>().To<TxtFileAdapter>();
            Bind<IZeilen_lesen>().To<Zeilen_lesen>();
            Bind<IMap>().To<Map>();
            Bind<ICache>().To<CacheDisposer>();
            Bind<IFactory>().To<Factory>();
            Bind<ISeiten_speichern>().To<Seiten_speichern>();
            Bind<ISeite_liefern>().To<Seite_liefern>();
            Bind<ISeite_anzeigen_Board>().To<Seite_anzeigen_Board>();
            Bind<IHeader_von_Daten_trennen>().To<Header_von_Daten_trennen>();
            Bind<IHeader_zerlegen>().To<Header_zerlegen>();
            Bind<IDaten_zerlegen>().To<Daten_zerlegen>();
            Bind<IJoin<CSVZeile, IEnumerable<CSVZeile>>>().To<Join<CSVZeile, IEnumerable<CSVZeile>>>();
            Bind<ISeite_erstellen_Board>().To<Seite_erstellen_Board>();
            Bind<ISeiten_erstellen>().To<Seiten_erstellen>();
            Bind<IDetails_anzeigen_Board>().To<Details_anzeigen_Board>();
            Bind<IId_ermitteln>().To<ID_Ermitteln>();
            Bind<IJoin<IDetailviewBoard, Datensatz>>().To<AutoResetJoin<IDetailviewBoard, Datensatz>>();
            Bind<IHost_für_DetailviewBoard>().To<Host_für_DetailviewBoard>();
        }
    }
}
